//package com.yili.oa;
//
//import com.alibaba.druid.pool.DruidDataSource;
//import com.yili.oa.config.DataBaseConfig;
//import com.yili.oa.config.MyDataBase;
//import com.yili.oa.utils.ListUtils;
//import com.yili.oa.utils.hodle.DynamicDataSource;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.beans.BeansException;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.beans.factory.config.BeanDefinition;
//import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
//import org.springframework.beans.factory.support.BeanDefinitionBuilder;
//import org.springframework.beans.factory.support.BeanDefinitionRegistry;
//import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.core.env.Environment;
//import java.util.HashMap;
//import java.util.Map;
//
//@Configuration
//
//    @Autowired
//    DataBaseConfig dataBaseConfig;
//
//
//    @Bean
//    public BeanDefinitionRegistryPostProcessor beanDefinitionRegistryPostProcessor(Environment environment){
//        return new BeanDefinitionRegistryPostProcessor() {
//            @Override
//            public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
//                Map<Object, Object> dsMap = new HashMap(5);
//                BeanDefinitionBuilder dynamicDataSource = BeanDefinitionBuilder.rootBeanDefinition(DynamicDataSource.class);
//                int i = 0;
//                while (true){
//
//                    String name = environment.getProperty("dbs.list["+i+"].dbName");
//                    if(StringUtils.isEmpty(name)){
//                        break;
//                    }
//                    String driverClass = environment.getProperty("dbs.list["+i+"].driverClassName");
//                    String url = environment.getProperty("dbs.list["+i+"].url");
//                    String password = environment.getProperty("dbs.list["+i+"].password");
//                    String username = environment.getProperty("dbs.list["+i+"].username");
//
//                    BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(DruidDataSource.class);
//                    builder.addPropertyValue("driverClassName", driverClass);
//                    builder.addPropertyValue("url", url);
//                    builder.addPropertyValue("password", password);
//                    builder.addPropertyValue("username", username);
//
//                    DruidDataSource druidDataSource = new DruidDataSource();
//                    druidDataSource.setDriverClassName(driverClass);
//                    druidDataSource.setUrl(url);
//                    druidDataSource.setUsername(username);
//                    druidDataSource.setPassword(password);
//
//                    dsMap.put(name, druidDataSource);
//
//                    if(name.equals(environment.getProperty("dbs.default"))){
//                        dynamicDataSource.addPropertyValue("defaultTargetDataSource",druidDataSource);
//                    }
//                    registry.registerBeanDefinition(name, builder.getBeanDefinition());
//                    i++;
//                }
//
//                dynamicDataSource.addPropertyValue("targetDataSources", dsMap);
//                registry.registerBeanDefinition("dynamicDataSource", dynamicDataSource.getBeanDefinition());
//
//
//            }
//
//            @Override
//            public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
//
//            }
//        };
//    }
//
//
//
//
//
//}
